option and_then, map, or_else
let something: Option<i32> = Some(100);
let mapped_ok: Option<i32> = something.map(|i| i / 10);
let mapped_no: Option<Option<i32>> = something.map(|i| i.checked_div(0));
let solution: Option<i32> = something.and_then(|i| i.checked_div(0));
- 덕분에
Option
내부의 값을 체이닝 하여 단계적으로 바꿔나갈 수 있게 되었다.
struct Node {
next: Option<Node>,
elem: i32,
}
let next_element: Option<Node> = node
.and_then(|node| node.next)
.map(|node| node.elem);
- or_else는 체이닝 도중에 발생하는 예외(Option이니까 당연히 None)에 대하여 클로저를 호출하고 클로저의 리턴을 그대로 리턴한다. 뒤 체인은 신경도 쓰지 않는다!